package com.kgc.service.impl;
import com.kgc.common.*;
import com.kgc.dm.client.RestDmImageClient;
import com.kgc.dm.client.RestDmItemClient;
import com.kgc.dm.pojo.DmImage;
import com.kgc.dm.pojo.DmItem;
import com.kgc.service.HomeService;
import com.kgc.util.Constants;
import com.kgc.util.EmptyUtils;
import com.kgc.vo.HotItemVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class HomeServiceImpl implements HomeService {
    @Resource
    private RestDmItemClient restDmItemClient;
    @Resource
    private RestDmImageClient restDmImageClient;
    @Resource
    private RedisUtils redisUtils;
    @Override
    public Dto queryBanner() throws Exception {
        Map<String,Object> getItem=new HashMap<>();
        getItem.put("isBanner",1);
        getItem.put("beginPos",0);
        getItem.put("pageSize",5);
        List<DmItem> dmItemListByMap = restDmItemClient.getDmItemListByMap(getItem);//这一步就通过client直达provider项目，调用provider,获取数据库中的数据。
        List<HotItemVo> hotItemVoList=new ArrayList<>();
        for (DmItem dmItem:dmItemListByMap) {
            HotItemVo hotItemVo=new HotItemVo();
            BeanUtils.copyProperties(dmItem,hotItemVo);

//调用底下定义的封装的getReisdImages方法，输入参数，参数类型，个数，顺序必须保持一致。
            String url=getReisdImages(dmItem.getId(), Constants.Image.ImageType.carousel,Constants.Image.ImageCategory.item);
            hotItemVo.setImgUrl(url);
            hotItemVoList.add(hotItemVo);
        }
        return DtoUtil.returnDataSuccess(hotItemVoList);
    }

    /**
     * 从redis中获取图片连接
     * @param
     * @param
     * @return
     */
//抽取封装一个getReisdImages方法。
    public String getReisdImages(Long taregtId,Integer type,Integer category) throws Exception {
        //先判断dmItemList是否为空
        if (EmptyUtils.isEmpty(taregtId)){
            return null;
        }
        //如果dmItemList不为空，先去redis中取数据
        String key= Constants.IMAGE_TOKEN_PREFIX+taregtId+"_"+type+"_"+category;
        String url=(String)redisUtils.get(key);
        //如果redis中没有数据，去数据库中查询
        if (EmptyUtils.isEmpty(url)){
            List<DmImage> dmImages = restDmImageClient.queryDmImageList(taregtId, type, category);//这一步就通过client直达provider项目，调用provider,获取数据库中的数据。
            url=EmptyUtils.isEmpty(dmImages.get(0).getImgUrl()) ? "":dmImages.get(0).getImgUrl();
            //再把这条数据放如到redis
            redisUtils.set(key,url);
        }
        return url;
    }
}
